package edu.xust.service.impl;

import edu.xust.dto.AdDto;
import edu.xust.mapper.AdMapper;
import edu.xust.pojo.AdBean;
import edu.xust.service.AdService;
import edu.xust.util.FileUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * AdService的实现类
 */
@Service
public class AdServiceImpl implements AdService {
    @Autowired
    private AdMapper adMapper;
    @Value("${adImage.savePath}")//读取配置文件中的文件路径
    private String adImageSavePath;
    @Value("${adImage.url}")//访问路径
    private String adImageUrl;

    private String fileName;
    @Override
    public boolean add(AdDto adDto) {
        //adDto 为开发界面所用的  adBean数据库层的
        AdBean ad = new AdBean();
        ad.setTitle(adDto.getTitle());//广告标题
        ad.setLink(adDto.getLink());//广告地址
        ad.setWeight(adDto.getWeight());//广告权重
        if(adDto.getImageFile()!=null&&adDto.getImageFile().getSize()>0) {
            //文件在数据库的名称
            //配置的路径+当前时间+图片名，为访问的文件，加当前时间为了避免重复名称
            fileName = System.currentTimeMillis() + "_" + adDto.getImageFile().getOriginalFilename();
            File file = new File(adImageSavePath + fileName);//文件的路径
            File fileFolder = new File(adImageSavePath);//文件所在的文件夹
            if(!fileFolder.exists())
                fileFolder.mkdirs();//确保文件夹存在
            try {
                adDto.getImageFile().transferTo(file);//把文件存入磁盘
                ad.setImageName(fileName);
                adMapper.insert(ad);
                return true;
            } catch (IOException e) {
                return false;
            }
        }else{//传过来的文件有问题
            return false;
        }
    }

    /**
     * 分页查找
     * @param adDto
     * @return
     */
    @Override
    public List<AdDto> searchByPage(AdDto adDto){
        List<AdDto> result= new ArrayList<AdDto>();//返回的广告
        AdBean ad = new AdBean();
        BeanUtils.copyProperties(adDto,ad);
        //数据库查出的结果
        List<AdBean> adList = adMapper.selectByPage(ad);
        for(AdBean adTemp:adList){
            AdDto adDtoTemp = new AdDto();
            //获取图片的访问路径位置  访问url+图片名
            adDtoTemp.setImg(adImageUrl+adTemp.getImageName());
            BeanUtils.copyProperties(adTemp,adDtoTemp);
            result.add(adDtoTemp);
        }
        return result;
    }

    @Override
    public AdBean searchById(int id) {
        return adMapper.selectById(id);
    }

    @Override
    public boolean remove(AdDto adDto) {
        AdBean ad = new AdBean();
        BeanUtils.copyProperties(adDto,ad);
        FileUtil.delete(adImageSavePath+ad.getImageName());
        int i = adMapper.delete(ad);
        return i==1;
    }

    @Override
    public boolean update(AdDto adDto) {
        AdBean ad = new AdBean();
        ad.setTitle(adDto.getTitle());//广告标题
        ad.setLink(adDto.getLink());//广告地址
        ad.setWeight(adDto.getWeight());//广告权重
        if(adDto.getImageFile()!=null&&adDto.getImageFile().getSize()>0) {
            try {
              fileName = FileUtil.save(adDto.getImageFile(), adImageSavePath);
              ad.setImageName(fileName);
            } catch (IOException e) {
                return false;
            }
        }
        int i = adMapper.update(ad);
        if(i!=1)
            return false;
        if(fileName!=null)//删除原来的图片
            return FileUtil.delete(adImageSavePath+adDto.getImageName());
      return true;
    }
}
